package com.fpswork.util;





import com.aliyun.mns.client.CloudAccount;
import com.aliyun.mns.client.CloudTopic;
import com.aliyun.mns.client.MNSClient;
import com.aliyun.mns.common.ServiceException;
import com.aliyun.mns.model.BatchSmsAttributes;
import com.aliyun.mns.model.MessageAttributes;
import com.aliyun.mns.model.RawTopicMessage;
import com.aliyun.mns.model.TopicMessage;



/**
 * Created on 17/6/7.
 * 短信API产品的DEMO程序,工程中包含了一个SmsDemo类，直接通过
 * 执行main函数即可体验短信产品API功能(只需要将AK替换成开通了云通信-短信产品功能的AK即可)
 * 工程依赖了2个jar包(存放在工程的libs目录下)
 * 1:aliyun-java-sdk-core.jar
 * 2:aliyun-java-sdk-dysmsapi.jar
 *
 * 备注:Demo工程编码采用UTF-8
 * 国际短信发送请勿参照此DEMO
 */

public class SmsUtil {
	public static String YourAccessId="LTAIAime5VvKVHDd"; 
    public static String YourAccessKeySecret="intJBf2FrofEcn8GinPpBOOodxeWD0";
    //Endpoint 
    public static String YourMNSEndpoint="https://1579593018425692.mns.cn-hangzhou.aliyuncs.com/";   
    public static String YourTopic="sms.topic-cn-hangzhou";//主题名称    
    public static String YourSMSTemplateCode="SMS_102380053";//短信模板code 
    public static String YourSignName="中国追溯云";//短信签名名称  

    public static void sendSms(String phone,String code) throws Exception {
    	 /**
         * Step 1. 获取主题引用LTAIAime5VvKVHDd  
         */
        CloudAccount account = new CloudAccount(YourAccessId, YourAccessKeySecret,YourMNSEndpoint);
        
        MNSClient client = account.getMNSClient();
        CloudTopic topic = client.getTopicRef(YourTopic);

        
        /**
         * Step 2. RawTopicMessage设置SMS消息体（必须） 
         * 注：目前暂时不支持消息内容为空，需要指定消息内容，不为空即可。msg 
         */
        
        RawTopicMessage msg = new RawTopicMessage();  
        msg.setMessageBody("sms-message"); 
        System.out.println("msg:"+msg.getMessageBody()+"----"+msg); 
        
        /**
         * Step 3. 生成SMS消息属性
         */
        MessageAttributes messageAttributes = new MessageAttributes();
   
        BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();
        // 3.1 设置发送短信的签名（SMSSignName）
        batchSmsAttributes.setFreeSignName(YourSignName);
        // 3.2 设置发送短信使用的模板（SMSTempateCode）
        batchSmsAttributes.setTemplateCode(YourSMSTemplateCode);
        
        // 3.3 设置发送短信所使用的模板中参数对应的值（在短信模板中定义的，没有可以不用设置）
        BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams();
        smsReceiverParams.setParam("code", code);  
        
        System.out.println(smsReceiverParams.getParams());
        System.out.println(batchSmsAttributes.getFreeSignName());
        System.out.println(batchSmsAttributes.getSmsParams());
        System.out.println(batchSmsAttributes.getTemplateCode());
        System.out.println(batchSmsAttributes.getType());
        
        // 3.4 增加接收短信的号码
        batchSmsAttributes.addSmsReceiver(phone, smsReceiverParams);
        messageAttributes.setBatchSmsAttributes(batchSmsAttributes);
        
        System.out.println(messageAttributes.getBatchSmsAttributes().toString());
        
        	  try {
                  /**
                   * Step 4. 发布SMS消息
                   */
                  TopicMessage ret = topic.publishMessage(msg, messageAttributes);                 
                  
                  System.out.println("MessageId: " + ret.getMessageId());
                  System.out.println("MessageMD5: " + ret.getMessageBodyMD5());
//                  System.out.println("我是消息："+ret.getMessageBody().toString());
                  
                  
              } catch (ServiceException se) {
                  System.out.println(se.getErrorCode() + se.getRequestId());
                  System.out.println(se.getMessage());
                  se.printStackTrace();
              } catch (Exception e) {
                  e.printStackTrace();
              }
              client.close();  
    }

    
    public static void sendSmsApproval(String phone,String code,String code1) throws Exception {
   	 /**
        * Step 1. 获取主题引用LTAIAime5VvKVHDd  
        */
       CloudAccount account = new CloudAccount(YourAccessId, YourAccessKeySecret,YourMNSEndpoint);
       
       MNSClient client = account.getMNSClient();
       CloudTopic topic = client.getTopicRef(YourTopic);

       
       /**
        * Step 2. RawTopicMessage设置SMS消息体（必须） 
        * 注：目前暂时不支持消息内容为空，需要指定消息内容，不为空即可。msg 
        */
       
       RawTopicMessage msg = new RawTopicMessage();  
       msg.setMessageBody("sms-message"); 
       /**
        * Step 3. 生成SMS消息属性
        */
       MessageAttributes messageAttributes = new MessageAttributes();
  
       BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();
       // 3.1 设置发送短信的签名（SMSSignName）
       batchSmsAttributes.setFreeSignName(YourSignName);
       // 3.2 设置发送短信使用的模板（SMSTempateCode）
       batchSmsAttributes.setTemplateCode("SMS_126790007");
       
       // 3.3 设置发送短信所使用的模板中参数对应的值（在短信模板中定义的，没有可以不用设置）
       BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams();
       smsReceiverParams.setParam("mtname", code);
       smsReceiverParams.setParam("submittime", code1);  
      
       System.out.println(smsReceiverParams.getParams());
       System.out.println(batchSmsAttributes.getFreeSignName());
       System.out.println(batchSmsAttributes.getSmsParams());
       System.out.println(batchSmsAttributes.getTemplateCode());
       System.out.println(batchSmsAttributes.getType());
       
       // 3.4 增加接收短信的号码
       batchSmsAttributes.addSmsReceiver(phone, smsReceiverParams);
       messageAttributes.setBatchSmsAttributes(batchSmsAttributes);
       
       System.out.println(messageAttributes.getBatchSmsAttributes().toString());
       
       	  try {
                 /**
                  * Step 4. 发布SMS消息
                  */
                 TopicMessage ret = topic.publishMessage(msg, messageAttributes);                 
                 
                 System.out.println("MessageId: " + ret.getMessageId());
                 System.out.println("MessageMD5: " + ret.getMessageBodyMD5());
//                 System.out.println("我是消息："+ret.getMessageBody().toString());
                 
                 
             } catch (ServiceException se) {
                 System.out.println(se.getErrorCode() + se.getRequestId());
                 System.out.println(se.getMessage());
                 se.printStackTrace();
             } catch (Exception e) {
                 e.printStackTrace();
             }
             client.close();  
   }
    public static void sendSmsApprovalNo(String phone,String code,String code1) throws Exception {
   	 /**
        * Step 1. 获取主题引用LTAIAime5VvKVHDd  
        */
       CloudAccount account = new CloudAccount(YourAccessId, YourAccessKeySecret,YourMNSEndpoint);
       
       MNSClient client = account.getMNSClient();
       CloudTopic topic = client.getTopicRef(YourTopic);

       
       /**
        * Step 2. RawTopicMessage设置SMS消息体（必须） 
        * 注：目前暂时不支持消息内容为空，需要指定消息内容，不为空即可。msg 
        */
       
       RawTopicMessage msg = new RawTopicMessage();  
       msg.setMessageBody("sms-message"); 
       
       /**
        * Step 3. 生成SMS消息属性
        */
       MessageAttributes messageAttributes = new MessageAttributes();
  
       BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();
       // 3.1 设置发送短信的签名（SMSSignName）
       batchSmsAttributes.setFreeSignName(YourSignName);
       // 3.2 设置发送短信使用的模板（SMSTempateCode）
       batchSmsAttributes.setTemplateCode(YourSMSTemplateCode);
       batchSmsAttributes.setTemplateCode("SMS_126865155");
       
       // 3.3 设置发送短信所使用的模板中参数对应的值（在短信模板中定义的，没有可以不用设置）
       BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams();
       smsReceiverParams.setParam("user", code);  
       smsReceiverParams.setParam("result", code1);  
       System.out.println(smsReceiverParams.getParams());
       System.out.println(batchSmsAttributes.getFreeSignName());
       System.out.println(batchSmsAttributes.getSmsParams());
       System.out.println(batchSmsAttributes.getTemplateCode());
       System.out.println(batchSmsAttributes.getType());
       
       // 3.4 增加接收短信的号码
       batchSmsAttributes.addSmsReceiver(phone, smsReceiverParams);
       messageAttributes.setBatchSmsAttributes(batchSmsAttributes);
       
       System.out.println(messageAttributes.getBatchSmsAttributes().toString());
       
       	  try {
                 /**
                  * Step 4. 发布SMS消息
                  */
                 TopicMessage ret = topic.publishMessage(msg, messageAttributes);                 
                 
                 System.out.println("MessageId: " + ret.getMessageId());
                 System.out.println("MessageMD5: " + ret.getMessageBodyMD5());
//                 System.out.println("我是消息："+ret.getMessageBody().toString());
                 
                 
             } catch (ServiceException se) {
                 System.out.println(se.getErrorCode() + se.getRequestId());
                 System.out.println(se.getMessage());
                 se.printStackTrace();
             } catch (Exception e) {
                 e.printStackTrace();
             }
             client.close();  
   }

    
    
    
    public static void sendSmsAddUser(String phone,String code,String code1) throws Exception {
      	 /**
           * Step 1. 获取主题引用LTAIAime5VvKVHDd  
           */
          CloudAccount account = new CloudAccount(YourAccessId, YourAccessKeySecret,YourMNSEndpoint);
          
          MNSClient client = account.getMNSClient();
          CloudTopic topic = client.getTopicRef(YourTopic);

          
          /**
           * Step 2. RawTopicMessage设置SMS消息体（必须） 
           * 注：目前暂时不支持消息内容为空，需要指定消息内容，不为空即可。msg 
           */
          
          RawTopicMessage msg = new RawTopicMessage();  
          msg.setMessageBody("sms-message"); 
          
          /**
           * Step 3. 生成SMS消息属性
           */
          MessageAttributes messageAttributes = new MessageAttributes();
     
          BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();
          // 3.1 设置发送短信的签名（SMSSignName）
          batchSmsAttributes.setFreeSignName(YourSignName);
          // 3.2 设置发送短信使用的模板（SMSTempateCode）
          batchSmsAttributes.setTemplateCode(YourSMSTemplateCode);
          batchSmsAttributes.setTemplateCode("SMS_128645112");
          
          // 3.3 设置发送短信所使用的模板中参数对应的值（在短信模板中定义的，没有可以不用设置）
          BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams();
          smsReceiverParams.setParam("collection", code);  
          smsReceiverParams.setParam("pwd", code1);  
          smsReceiverParams.setParam("phone", phone);  
          System.out.println(smsReceiverParams.getParams());
          System.out.println(batchSmsAttributes.getFreeSignName());
          System.out.println(batchSmsAttributes.getSmsParams());
          System.out.println(batchSmsAttributes.getTemplateCode());
          System.out.println(batchSmsAttributes.getType());
          
          // 3.4 增加接收短信的号码
          batchSmsAttributes.addSmsReceiver(phone, smsReceiverParams);
          messageAttributes.setBatchSmsAttributes(batchSmsAttributes);
          
          System.out.println(messageAttributes.getBatchSmsAttributes().toString());
          
          	  try {
                    /**
                     * Step 4. 发布SMS消息
                     */
                    TopicMessage ret = topic.publishMessage(msg, messageAttributes);                 
                    
                    System.out.println("MessageId: " + ret.getMessageId());
                    System.out.println("MessageMD5: " + ret.getMessageBodyMD5());
//                    System.out.println("我是消息："+ret.getMessageBody().toString());
                    
                    
                } catch (ServiceException se) {
                    System.out.println(se.getErrorCode() + se.getRequestId());
                    System.out.println(se.getMessage());
                    se.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                client.close();  
      }

  
}
